package com.codingfuture.erp_system.web.controller;

import com.codingfuture.erp_system.dto.PageData;
import com.codingfuture.erp_system.entity.GoodsType;
import com.codingfuture.erp_system.service.GoodsTypeService;
import com.codingfuture.erp_system.util.CheckUtils;
import com.codingfuture.erp_system.util.Result;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.List;

@Slf4j
@RequestMapping("/v2")
@RestController
public class GoodsTypeController {

    @Autowired
    private GoodsTypeService goodsTypeService;
    private final String str = "";

    /**
     * 添加
     *
     * @param goodsType
     * @return 成功？失败？
     */

    @PostMapping("//goodstype/add")
    public Result<?> insert(GoodsType goodsType) {
        String name = goodsType.getName();

        if (name == null || name.equals(str)) {
            return Result.error(400, "请输入正确的名称");
        }
        //校验名称合法性
        else if (CheckUtils.checkChinese(goodsType.getName())) {
            return Result.error(500, "名称不是中文/过长");
        } else if (goodsTypeService.findByName(name) == null) {
            boolean result = goodsTypeService.insert(goodsType);
            return result ? Result.ok() : Result.error(500, "添加失败");
        }
        return Result.error(400, "输入内容不能与已有内容重复");
    }

    /**
     * 删除
     *
     * @param id
     * @return 成功？失败？
     */

    @DeleteMapping("/goodstype")
    public Result<?> delete(Integer id) {

        boolean result = goodsTypeService.delete(id);
        return result ? Result.ok() : Result.error(500, "服务端错误");
    }

    /**
     * 修改
     *
     * @param goodsType
     * @param httpSession
     * @return 成功？失败？
     */

    @PostMapping("//goodstype/update")
    public Result<?> update(GoodsType goodsType, HttpSession httpSession) {
        Object id = httpSession.getAttribute("goodsTypeId");
        goodsType.setUuid((Integer) id);
        String name = goodsType.getName();
        if (name == null || name.equals(str)) {
            return Result.error(400, "请输入正确的名称");
        }
        //校验名称合法性
        else if (CheckUtils.checkChinese(goodsType.getName())) {
            return Result.error(500, "名称不是中文/过长");
        } else if (goodsTypeService.findByName(name) == null) {
            boolean result = goodsTypeService.update(goodsType);
            return result ? Result.ok() : Result.error(500, "错误");
        }
        return Result.error(400, "输入内容不能与已有内容重复");

    }

    /**
     * id查询
     *
     * @param id
     * @param httpSession
     * @return goodsType
     */
    @GetMapping("/goodstype/selectone")
    public Result<?> findById(Integer id, HttpSession httpSession) {
        log.debug("hello");
        httpSession.setAttribute("goodsTypeId", id);
        GoodsType goodsType = goodsTypeService.findById(id);
        return goodsType == null ? Result.error(500, "服务端错误") : Result.OK(goodsType);
    }

    /**
     * 分页 模糊搜索
     *
     * @param page
     * @param rows
     * @param name
     * @return 全部数据
     */
    @GetMapping("/goodstype/listByPage")
    public Result<?> findByAll(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int rows, String name) {
        Page<GoodsType> page1 = PageHelper.startPage(page, rows);
        List<GoodsType> goodsTypeList = goodsTypeService.findByAll(name);
        PageData<GoodsType> data = new PageData<>(goodsTypeList, page1.getTotal());
        return Result.ok(data);
    }


}
